$(function () {
    /**
     * 添加datatable列显示、隐藏功能
     */
    var $dataTableTitle = function () {    	
        var $table = $(this);
        var $tableId = $($table).attr('id');
        var $menuId = $tableId + '_menu';
        var $menuColumnId = $tableId + '_menuColumn';
        var $menuHtml = '<div class="dataTableMenu" id="' + $menuId + '">';
        var $text, $value = '';
        $($table).find('thead>tr th').each(function (index) {
            $text = $(this).find('>div').html();
            if ($.trim($text).length > 0) {
                $text = $(this).attr('aria-label');
                $text = $text.substr(0, $text.indexOf(':'));
                if ($text.length == 0) {
                    return;
                }

                if ($(this).find('input[type=checkbox]').length == 0 && $text.indexOf('操作') < 0) {
                    $menuHtml += '<div>'
                        + '<input type="checkbox" value="' + (index) + '" id="dataTableMenu_checkbox' + (index) + '" checked="true"> '
                        + $text
                        + '</div>';
                    $value += index + ',';
                }
            }
        });
        $menuHtml += '</div>';
        $($table).parent().append($menuHtml);
        var $menu = $('#' + $menuId);
        $($menu).find('div>span').remove();
        $($menu).after('<input type="hidden" id="' + $menuColumnId + '" value="' + $value + '" />');

        /**
         * 鼠标右键，打开显示或隐藏列的选择框
         */
        $($table).bind('mousedown', function (event) {
            //右键
            if (event.which == 3) {
                $('.dataTableMenu').hide();
                $($menu).css('left', document.body.scrollLeft + event.clientX);
                $($menu).css('top', document.body.scrollTop + event.clientY - $(this).offset().top).show();
            }
        });

        /**
         * 其他标签点击时，隐藏菜单
         */
        $('body').bind('click', function (event) {
            if (!($(event.target).is($($menu).find('*')))) {
                $($menu).hide();
            }
        });

        /**
         * 选择显示或隐藏的列
         */
        $($menu).find('div').bind('click', function (e) {
            var $menuInput = $(this).find('input');
            var $val = $($menuInput).val();
            if (!$(e.target).is($($menuInput))) {
                if ($($menuInput).prop('checked')) {
                    $($menuInput).removeAttr('checked');
                } else {
                    $($menuInput).prop({checked: true});
                }
            }
            //如果勾选，则显示，否则隐藏
            if ($($menuInput).prop('checked')) {
                //隐藏头列
                $($table).find('thead').find('th:eq(' + $val + ')').show();
                //隐藏数据列
                $($table).find('tr').find('td:eq(' + $val + ')').show();
            } else {
                $($table).find('thead').find('th:eq(' + $val + ')').hide();
                $($table).find('tr').find('td:eq(' + $val + ')').hide();
            }
            var $column = '';
            $($menuInput).parent().parent().find('input').each(function () {
                if ($(this).prop('checked')) {
                    $column += $(this).val() + ',';
                }
            });
            $('#' + $menuColumnId).val($column);
        });

        /**
         * 翻页时，隐藏取消显示的列
         */
        $($table).nextAll('div:first').find('div:first').bind('DOMNodeInserted', function () {
            //获取
            $($menu).find('input').each(function () {
                var $index = $(this).val();
                if ($(this).prop('checked')) {
                    $($table).find('tr').find('td:eq(' + $index + ')').show();
                } else {
                    $($table).find('tr').find('td:eq(' + $index + ')').hide();
                }
            });
        });
        /**
         * 取消浏览器右键框
         */
        document.oncontextmenu = function (obj) {
            return false;
        }
    };
    $.fn.dataTableTitle = $dataTableTitle;
});